package fr.charlott.business.dto;

import java.io.Serializable;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

import org.apache.commons.lang.StringUtils;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;

import fr.charlott.core.repository.model.Collection;

public class ProduitDTO  implements Serializable{

	private static final long serialVersionUID = 1L;

	private Long id;
	
	@Pattern(regexp="^[0-9]{4}.[0-9]{2}$", message="La reference n'est pas valide")
	private String reference;
	
	@NotNull
	@NotEmpty
	private String nom;
	
	//Saison
	@Valid
	private SaisonDTO saison;

	@NotNull
	private Collection collection;
	
	@Valid
	private CategorieDTO categorie;
	
	@NotNull
	@Range
	private double prix;

	public ProduitDTO(){
		super();
	}
	
	// setter - getter
	public ProduitDTO(SaisonDTO saison) {
		// TODO Auto-generated constructor stub
		super();
		this.saison = saison;
	}
	
	@Override
	public int hashCode() {
		return referenceToInt(reference);
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ProduitDTO other = (ProduitDTO) obj;
		return (referenceToInt(reference) == referenceToInt(other.reference));
	} 
	
	private int referenceToInt(String reference){
		return Integer.valueOf(StringUtils.remove(reference, "."));
	}

	/**
	 * @return the id
	 */
	public Long getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}

	public Collection getCollection() {
		return collection;
	}

	public void setCollection(Collection collection) {
		this.collection = collection;
	}

	public double getPrix() {
		return prix;
	}

	public void setPrix(double prix) {
		this.prix = prix;
	}

	public String getNom() {
		return nom;
	}

	public void setNom(String nom) {
		this.nom = nom;
	}

	public SaisonDTO getSaison() {
		return saison;
	}

	public void setSaison(SaisonDTO saison) {
		this.saison = saison;
	}

	public String getReference() {
		return reference;
	}

	public void setReference(String reference) {
		this.reference = reference;
	}

	public CategorieDTO getCategorie() {
		return categorie;
	}

	public void setCategorie(CategorieDTO categorie) {
		this.categorie = categorie;
	}

}
